/*

 * Licensed to the Apache Software Foundation (ASF) under one

 * or more contributor license agreements.  See the NOTICE file

 * distributed with this work for additional information

 * regarding copyright ownership.  The ASF licenses this file

 * to you under the Apache License, Version 2.0 (the

 * "License"); you may not use this file except in compliance

 * with the License.  You may obtain a copy of the License at

 *

 *     http://www.apache.org/licenses/LICENSE-2.0

 *

 * Unless required by applicable law or agreed to in writing, software

 * distributed under the License is distributed on an "AS IS" BASIS,

 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

 * See the License for the specific language governing permissions and

 * limitations under the License.

 */

package com.bff.gaia.unified.sdk.extensions.sql.impl.parser;



import com.bff.gaia.unified.vendor.guava.com.google.common.collect.ImmutableList;

import org.apache.calcite.sql.*;

import org.apache.calcite.sql.parser.SqlParserPos;



import java.util.List;



/** Parse tree for column. */

public class SqlColumnDeclaration extends SqlCall {

  private static final SqlSpecialOperator OPERATOR =

      new SqlSpecialOperator("COLUMN_DECL", SqlKind.COLUMN_DECL);



  final SqlIdentifier name;

  final SqlDataTypeSpec dataType;

  final SqlNode comment;



  /** Creates a SqlColumnDeclaration; use {@link SqlDdlNodes#column}. */

  SqlColumnDeclaration(

	  SqlParserPos pos, SqlIdentifier name, SqlDataTypeSpec dataType, SqlNode comment) {

    super(pos);

    this.name = name;

    this.dataType = dataType;

    this.comment = comment;

  }



  @Override

  public SqlOperator getOperator() {

    return OPERATOR;

  }



  @Override

  public List<SqlNode> getOperandList() {

    return ImmutableList.of(name, dataType);

  }



  @Override

  public void unparse(SqlWriter writer, int leftPrec, int rightPrec) {

    name.unparse(writer, 0, 0);

    dataType.unparse(writer, 0, 0);

    if (dataType.getNullable() != null && !dataType.getNullable()) {

      writer.keyword("NOT NULL");

    }

    if (comment != null) {

      writer.keyword("COMMENT");

      comment.unparse(writer, 0, 0);

    }

  }

}



// End SqlColumnDeclaration.java